package com.da.javatest.interview.session3;

import com.da.javatest.interview.session3.other.DependenceA;
import com.da.javatest.interview.session3.other.DependenceB;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author JokerDa.
 * @date 2020/12/28 22:32
 * Description:过程：getSingleton doCreateBean populateBean addSingleton
 *
 * 1.A创建过程中需要B，于是A将自己放入三级缓存里面，去实例化B
 * 2.B实例化的时候发现需要A，于是B先查一级缓存，没有，再查二级缓存，也没有，再查询三级缓存，找到了A
 * 然后把三级缓存里面的这个A放到二级缓存里面，并删除三级缓存里面的A
 * 3.B顺利初始化完成，将自己放入一级缓存里面（此时B中的A依然是创建中状态）
 * 然后回来接着创建A，此时B已经创建结束，直接从一级缓存里面拿到B，然后完成创建，并将自己放入一级缓存里面
 */
public class Test06Spring {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("xml/dependence.xml");
        DependenceA a = context.getBean("dependenceA", DependenceA.class);
        DependenceB b = context.getBean("dependenceB", DependenceB.class);
    }
}
